const { contextBridge, ipcRenderer,shell,clipboard,

} = require('electron')
// const {
//    machineIdSync

// } = require('node-machine-id')
// let regedit = require('regedit')
// regedit.setExternalVBSLocation('./resources/vbs')//
const path = require('path')
const fs = require('fs')
var process = require('child_process');
// const { Interface } = require('readline');



  const load =(val)=> {
    let arrFiles = []
    const files = fs.readdirSync(val)
    for (let i = 0; i < files.length; i++) {
      const item = files[i]
      const stat = fs.lstatSync(val + '\\' + item)
      if (stat.isDirectory() === true) {
        arrFiles = arrFiles.concat(load(val + '\\' + item))
      } else {
      var reg ='.git'
      var reg1 ='dist'
      var reg2 ='node_modules'
      if (val.indexOf(reg)==-1&&val.indexOf(reg1)==-1&&val.indexOf(reg2)==-1) { 
        arrFiles.push(val + '\\' + item) //获取所有类型文件
      }
      }
    }
    return arrFiles
  }
  /**
  /P 创建每个目标文件前提示。
　　/S 复制目录和子目录，除了空的。
　　/E 复制目录和子目录，包括空的。 与 /S /E 相同。可以用来修改 /T。
　　/V 验证每个新文件。
　　/W 提示您在复制前按键。
　　/C 即使有错误，也继续复制。
　　/I 如果目标不存在，又在复制一个以上的文件， 则假定目标一定是一个目录。
　　/Q 复制时不显示文件名。
　　/F 复制时显示完整的源和目标文件名。
　　/L 显示要复制的文件。
　　/G 允许将没有经过加密的文件复制到不支持加密的目标。
　　/H 也复制隐藏和系统文件。
　　/R 改写只读文件。
　　/T 创建目录结构，但不复制文件。不包括空目录或子目录。/T /E 包括空目录和子目录。
　　/U 只复制已经存在于目标中的文件。
　　/K 复制属性。一般的 Xcopy 会重设只读属性。
　　/N 用生成的短名复制。
　　/O 复制文件所有权和 ACL 信息。
　　/X 复制文件审核设置(隐含 /O)。
　　/Y 禁止提示以确认改写一个现存目标文件。
　　/-Y 导致提示以确认改写一个现存目标文件。
　　/Z 用重新启动模式复制网络文件。
   */
  /**
   * 
   * @param {*} from  路径来自哪里
   * @param {*} to 路径复制到哪里
   * @returns 
   */
  const copyDirectory = (from,to) =>{
    return new Promise((res,rej)=>{
      process.exec(`xcopy "${from}" ${to} /e /h /q /y`,function (error, stdout, stderr) {
        if (error !== null) {
          rej({
            error,stdout,stderr
          })
        }
        res()
  });
    })
    
  }

// 判断路径是否为目录
function isDirectory(path) {
  return fs.statSync(path).isDirectory();
}

// 判断路径是否为文件
function isFile(path) {
  return fs.statSync(path).isFile();
}
const loadFile = (path) =>{
  const array = fs.readdirSync(path)
  for (let index = 0; index < array.length; index++) {
    const element = array[index];
    const stat = fs.lstatSync(path + '\\' + element)
      if (stat.isDirectory() === true) {
        //说明是目录
        
      }
  }
}
/**
 * 拖拽获取目录数据  文件拖拽支持文件还是目录
 */
const getFilesData = (path) =>{
  let files = []
  const array = fs.readdirSync(path)
  for (let index = 0; index < array.length; index++) {
    const element = array[index];
    console.log('element :>> ', element);
    let allPath =path + '\\' + element //完整路径
    const stat = fs.lstatSync(allPath)
      if (stat.isDirectory() === true) {
        //说明是目录
         let item ={
        name:element,
        path:allPath,
        type:"directory",
        children:[]
      }
      item.children =  getFilesData(allPath)
      files.push(item)
      }else{
        files.push({
          name:element,
          path:allPath,
          type:"file"
        })
      }
  }
  return files
}
/**
 * 监听拖拽文件 并且下载
 */
contextBridge.exposeInMainWorld('electron', {
  startDrag: (fileName) => {
    ipcRenderer.send('ondragstart', fileName)
  },
  openDirectory:(options,callback)=>{
    ipcRenderer.send('open-directory-dialog',options);
    ipcRenderer.on('selectedItem',(e,path)=>{
    callback&&callback(path)
    });
  },
  
  fs,ipcRenderer,path,
  copyDirectory,shell,clipboard
  ,
  getFilesData,
  saveFile:(name,callback)=>{
    ipcRenderer.send('save-file-dialog',name);
    ipcRenderer.on('savedItem',(e,path)=>{
    callback&&callback(path)
    });
    
  },
  closeWindow(){
    ipcRenderer.send('quit')
  },
  // getPlatformId(){
  //   return machineIdSync()
  // }
  /**
 * 本示例以获取网易云音乐软件安装路径为例
 */


//https://blog.csdn.net/weixin_44717473/article/details/114285775?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-1-114285775-null-null.pc_agg_new_rank&utm_term=electron+%E6%9F%A5%E7%9C%8B%E6%B3%A8%E5%86%8C%E8%A1%A8%E5%B7%B2%E7%BB%8F%E5%AE%89%E8%A3%85%E7%9A%84%E5%BA%94%E7%94%A8&spm=1000.2123.3001.4430
// getSoftwarePath   (cb) {
//   let regeditPath =
//     'HKLM\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall' // 你想找到的软件的注册表目录（下图红色标注）
//   let softwareName = '网易云音乐' // 在regeditPath中的软件名称（下图蓝色标注）
//   let hasKey = false
//   regedit.list(regeditPath, (err, res) => {
//     cb(res)
//   })
// }

 
})

